/* 
 * Copyright [2017] [Alex/LiBo(libo2dev.aliyun.com/alex.link@foxmail.com)]
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.hyts.bmsp.record;

import java.util.List;

import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;

/**  
 * @Title AbstractRecordDao.java  
 * @Package com.hyts.bmsp.record  
 * @Description <p>用来代替 AbstractDBDAO类作为更加方便和合适的数据访问层服务
 * 				Db 类及其配套的 Record 类，提供了在 Model 类之外更为丰富的数据库操作功能。使用
 *				Db 与 Record 类时，无需对数据库表进行映射，Record 相当于一个通用的 Model。以下为 Db +
 *				Record 模式的一些常见用法</p>
 *              泛型：PO参数为数据持久化对象：BO为数据传输对象,VO返回数据类型
 * @author LiBo/Alex  
 * @date 2017年12月24日  
 * @version V1.0  
 */
public interface AbstractRecordDao<PO,BO> {
	
	/**  
	 * @Title: insert  
	 * @Description: 插入数据信息  
	 * @param @param po
	 * @param @return    参数  
	 * @return int    返回类型  
	 * @throws  
	 */ 
	int insert(PO po);
	 
	/**  
	 * @Title: insert  
	 * @Description:批量插入方法  
	 * @param @param pos
	 * @param @return    参数  
	 * @return int    返回类型  
	 * @throws  
	 */ 
	int insert(PO... pos);
	
	/**  
	 * @Title: update  
	 * @Description: 修改数据信息 
	 * @param @param po
	 * @param @return    参数  
	 * @return int    返回类型  
	 * @throws  
	 */ 
	int update(PO po);
	
	/**  
	 * @Title: insert  
	 * @Description:批量修改方法  
	 * @param @param pos
	 * @param @return    参数  
	 * @return int    返回类型  
	 * @throws  
	 */ 
	int update(PO... pos);
	
	/**  
	 * @Title: deleteById  
	 * @Description: 根据ID删除某条数据信息  
	 * @param @param id
	 * @param @return    参数  
	 * @return int    返回类型  
	 * @throws  
	 */ 
	int deleteById(BO bo);
	
	
	/**  
	 * @Title: deleteByCondition  
	 * @Description: 根据条件删除某些数据信息  
	 * @param @param bo
	 * @param @return    参数  
	 * @return int    返回类型  
	 * @throws  
	 */ 
	int deleteByCondition(BO bo);
	
	
	/**  
	 * @Title: selectById  
	 * @Description: 查询数据信息根据ID  
	 * @param @param id
	 * @param @return    参数  
	 * @return VO    返回类型  
	 * @throws  
	 */ 
	Record selectById(BO bo);
	
	/**  
	 * @Title: selectByCondition  
	 * @Description: 查询数据信息根据条件 -集合
	 * @param @param bo
	 * @param @return    参数  
	 * @return List<VO>    返回类型  
	 * @throws  
	 */ 
	List<Record> selectByConditionToList(BO bo);
	
	/**  
	 * @Title: selectByConditionToPage  
	 * @Description: 查询数据信息根据条件-page分页  
	 * @param @param bo
	 * @param @return    参数  
	 * @return Page<VO>    返回类型  
	 * @throws  
	 */ 
	Page<Record> selectByConditionToPage(BO bo);
	
	
	/**  
	 * @Title: selectByConditionToNumber  
	 * @Description: 查询数据信息根据条件-整数  
	 * @param @param bo
	 * @param @return    参数  
	 * @return int    返回类型  
	 * @throws  
	 */ 
	int selectByConditionToNumber(BO bo);
}
